package edu.uoc.tds.pac4.client.ss2;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;

import edu.uoc.tds.pac4.beans.Participacio;
import edu.uoc.tds.pac4.common.TDSLanguageUtils;

public class TableAssistentsModel extends AbstractTableModel {

	private static final long serialVersionUID = 1L;
	private List<String> columnNames;
	private List<String> columnaCodi;
	private List<String> columnaNom;
	private List<String> columnaCognom;
	private List<String> columnaPais;
	private List<String> columnaUniversitat;
	private List<Boolean> columnaAssistencia;
	
	public TableAssistentsModel() {
		super();
		columnNames = new ArrayList<String>();
		columnaCodi = new ArrayList<String>();
		columnaNom = new ArrayList<String>();
		columnaCognom = new ArrayList<String>();
		columnaPais = new ArrayList<String>();
		columnaUniversitat = new ArrayList<String>();
		columnaAssistencia = new ArrayList<Boolean>();
		
		columnNames.add(TDSLanguageUtils.getMessage("Client.PantallaAssistentsEvents.Codi"));
		columnNames.add(TDSLanguageUtils.getMessage("Client.PantallaAssistentsEvents.Nom"));
		columnNames.add(TDSLanguageUtils.getMessage("Client.PantallaAssistentsEvents.Cognom"));
		columnNames.add(TDSLanguageUtils.getMessage("Client.PantallaAssistentsEvents.Pais"));
		columnNames.add(TDSLanguageUtils.getMessage("Client.PantallaAssistentsEvents.Universitat"));
		columnNames.add(TDSLanguageUtils.getMessage("Client.PantallaAssistentsEvents.Assistencia"));
	}
	
	/**
	 * Afegeix un vector de participacions
	 * @param participacions
	 */
	public void addParticipacions(Vector<Participacio> participacions) {
		Iterator<Participacio> it = participacions.iterator();
		while(it.hasNext()) {
			addColumn(it.next());
		}
	}
	
	/**
	 * Carrega una columna
	 * @param participacio
	 */
	private void addColumn(Participacio participacio)
	{
		columnaCodi.add(participacio.getPartipant().getCodi());
		columnaNom.add(participacio.getPartipant().getNom());
		columnaCognom.add(participacio.getPartipant().getCognoms());
		columnaAssistencia.add(participacio.isAssistencia());
		columnaPais.add(participacio.getPartipant().getPais().getNom());
		columnaUniversitat.add(participacio.getPartipant().getUniversitat().getNom());
		
	}

	@Override
	public int getColumnCount() {
		return columnNames.size();
	}

	@Override
	public int getRowCount() {
		return columnaCodi.size();
	}
	
	@Override
	public String getColumnName(int col) {
        return columnNames.get(col);
    }
	
	@Override
	public void setValueAt(Object value, int row, int col) {
		switch(col)
		{
			case 0:
				columnaCodi.add(row, (String) value);
				break;
			case 1:
				columnaNom.add(row, (String) value);
				break;
			case 2:
				columnaCognom.add(row, (String) value);
				break;
			case 3:
				columnaPais.add(row, (String) value);
				break;
			case 4:
				columnaUniversitat.add(row, (String) value);
				break;
			case 5:
				columnaAssistencia.add(row, (Boolean)value);
				break;
		}
		fireTableCellUpdated(row, col);
	}
	
	/**
	 * If table is editable
	 */
	@Override
	public boolean isCellEditable(int row, int col) {
		if(col == columnNames.size()-1)
			return true;
		else
			return false;
	}

	@Override
	public Object getValueAt(int row, int col) {
		switch(col)
		{
			case 0:
				return columnaCodi.get(row);
			case 1:
				return columnaNom.get(row);
			case 2:
				return columnaCognom.get(row);
			case 3:
				return columnaPais.get(row);
			case 4:
				return columnaUniversitat.get(row);
			case 5:
				return columnaAssistencia.get(row);
		}
		
		return null;
	}
	
	@Override
	public Class<? extends Object> getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

}
